#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "skrypty.h"
#include "moddata.h"

CSkrypty::CSkrypty ()
{
    glob_Ldialog = 0;
}

CSkrypty::~CSkrypty ()
{
}

QString CSkrypty::kodowanie(QByteArray temp, QString kod)
{

    QString SSdial;
    QByteArray lang;
    lang.append(kod);
    //QByteArray lang = "Windows-1250"; // cp-1250
    //QByteArray lang = "UTF-8"; // UTF-8
    // --------------------Tworzy dekoder tekstu ---------------------
    QTextCodec *codec = QTextCodec::codecForName(lang);
    QTextDecoder *decoder = codec->makeDecoder();
    // --------------------koniec-------------------------------------

    SSdial += decoder->toUnicode(temp);

    return SSdial;
}
void CSkrypty::tryb_zapisu(QFile &file, QFile & file2)
{
    QFileInfo fi;
    QDir dir;
    fi.setFile(file);
    dir.setPath(fi.path());
    if (!dir.exists("wy")) dir.mkdir("wy");
    file2.setFileName(fi.path() + "/wy/" + fi.fileName());
    qDebug() << file2.fileName();

}

//------------------------Tablica zmiennyvh klucz----------------------
// 0 - tryb liczenia wpisów
// 1 - tryb wczytywania treści
// 2 - tryb zapisu treści
//------------------------koniec---------------------------------------

void CSkrypty::parsuj( QFile & file, CModData Baza[], QString kod, int klucz)
{
 if (klucz == 1) qDebug() << file.size() << "Rozmiar pliku";
 QFile file2;
 if (klucz == 2)
 {

     tryb_zapisu(file, file2);
     file2.open(QIODevice::WriteOnly | QIODevice::Text);

 }
 QTextStream out(&file2);

 char dialog[] = "ai_output";       //Tablica polecenia AI_Output.
 char Dother[] = "other";           //Tablica zmiennej other.
 char Dself[] = "self";             //Tablica zmiennej self.
 char kom[] = "//";

 char Znak;
 int Ldialog = 0;
 int looth = 0;        //Licznik dialogów Bohatera.
 int losel = 0;        //Licznik dialogów NPC.
 linia = 1;
 QString Sdialog;
 QString Sosoba;
 QString Skom;
 QString SSdial;


 file.getChar(&Znak);
 while (!file.atEnd())
 {
     for(int i=0; i!=9;)
     {
         if(tolower(Znak)==dialog[i]) //Porównuje wczytany znak przekonwertowany na mały z źródłem z tablicy.
         {
             Sdialog = Sdialog+Znak; //Jeżeli znaki pasują zapisuje je do strumienia.
             if (klucz == 2) out << Znak;
             file.getChar(&Znak);

             i++;
         }
         else
         {
             Sdialog="";
             break;
         }
         if (i==9)
         {
             //Ldialog++; //Zlicza dialogi.
             if (klucz == 1)
             {
                 // qDebug() << Sdialog;

             }

             //Znaleziono AI_Output więc szuka osoby.
             for(int c=0, d=0; c!=4 && d!=5;)
             {
                 if (tolower(Znak)==Dself[c]) //Szuka dialogów NPC.
                 {
                     Sosoba=Sosoba+Znak;
                     if (klucz == 2) out << Znak;
                     file.getChar(&Znak);
                     c++;
                 }
                 else if (tolower(Znak)==Dother[d]) //Szuka dialogów bohatera.
                 {
                     Sosoba=Sosoba+Znak;
                     if (klucz == 2) out << Znak;
                     file.getChar(&Znak);
                     d++;
                 }
                 else
                 {
                     Sosoba="";
                     if (klucz == 2) out << Znak;
                     file.getChar(&Znak);
                 }
                 if (c==4||d==5) //Wypisuje co znalazł.
                 {
                     if (klucz == 1)
                     {
                         qDebug() << Sosoba;
                     }

                     if (c==4) losel++; //Zlicza dialogi NPC.
                     if (d==5) looth++; //Zlicza dialogi Bohatera.
                 }
             }
             //Znalazł AI_Output i osobę więc szuka rozpoczęcia komentarza.
             for (int a=0; Znak!='\n';)
             {
                 if(Znak==kom[a])
                 {
                     Skom = Skom+Znak;
                     if (klucz == 2) out << Znak;
                     file.getChar(&Znak);
                     a++;
                 }
                 else
                 {
                     Skom="";
                     if (klucz == 2) out << Znak;
                     file.getChar(&Znak);
                 }
                 //Znalazł komentarz więc czyta treść aż do końca linii.
                 if (a==2)
                 {
                     SSdial="";
                     temp=0;
                     //Tdialogi[0] = toStr<int>(linia);
                     for (int b=0; Znak!='\n'&&Znak!='\r';)
                     {
                         temp += Znak;
                         file.getChar(&Znak);
                         b++;
                     }


                     if (klucz == 1)
                     {

                         SSdial += kodowanie(temp, kod); //Przepuszcza tekst przez dekoder cp-1250
                         qDebug() << SSdial;
                         //Baza[glob_Ldialog+Ldialog].setter("",file.fileName(),"","","",SSdial);
                         Baza[glob_Ldialog+Ldialog].setSciezka(file.fileName());
                         Baza[glob_Ldialog+Ldialog].setNr_wiersza(linia);
                         Baza[glob_Ldialog+Ldialog].setTyp(Sdialog);
                         Baza[glob_Ldialog+Ldialog].setOsoba(Sosoba);
                         Baza[glob_Ldialog+Ldialog].setTresc(SSdial);


                     }
                     if (klucz == 2) out << Baza[glob_Ldialog+Ldialog].tresc;
                     Ldialog++;
                 }
             }
         }
     }
     if (tolower(Znak)=='\n') linia++;
     if (klucz == 2)out << Znak;
     file.getChar(&Znak);

 }

glob_Ldialog += Ldialog;
if (klucz == 2) file2.close();

}

void CSkrypty::wywolaj(CModData Baza[])
{
//Baza[0]->zapis();
}
